"""
局部变量和全局变量

1 局部变量
    - 在函数内部定义的变量，只能在函数内部使用
    - 函数执行结束后，函数内部的局部变量，会被系统回收
    - 不同的函数，可以定义相容的名字的局部变量，但是各用个的不会产生影响

    局部变量的作用：
        在函数内部使用，临时保存函数内部需要使用的数据
    
    局部变量的生命周期：
        - 所谓生命周期就是变量从被创建到被系统回收的过程
        - 局部变量在函数执行时才会被创建
        - 函数执行结束后，局部变量被系统回收
        - 局部变量在生命周期内，可以用来存储函数内部临时使用到的数据    

2 全局变量
    - 在函数外部定义的变量(没有定义在某一个函数内)，所有函数内部都可以使用这个变量

    注意：函数执行时，需要处理变量时会：
        - 首先查找函数内部是否存在指定名称的局部变量，如果有，直接使用
        - 如果没有，查找函数外部是否存在指定名称的全局变量，如果有，直接使用
        - 如果还没有，程序报错 --> NameError: name 'num' is not defined

    使用全局变量注意事项：
        a 函数不能直接修改全局变量的引用
            - 全局变量是在函数外部定义的变量(没有定义在某一函数内)，所有函数内部都可以使用这个变量
            - 在函数内部，可以通过全局变量的引用获取对应的数据
            - 但是，不允许直接修改全局变量的引用 -- 使用赋值语句修改全局变量的值
                * 使用在函数中赋值语句只会在函数中定义一个名称相同的局部变量
        
        b 在函数内部修改全局变量的值
            - 如果在函数中需要修改全局变量，需要使用 global 关键字进行声明
            例如
                num = 10

                def test():
                    # 使用 global 关键字声明
                    # 告诉 Python 解释器，num 变量是一个全局变量
                    global num
                    num = 20
        
        c 全局变量定义的位置
            - 为了保证所有的函数都能够正确使用到全局变量，应该将全局变量定义在其他函数的上方

            * 代码结构示例
                - shebang #! /usr/local/python3
                - import 导入模块
                - 全局变量
                - 函数定义
                - 执行代码
        
        d 全局变量命名的建议
            - 为了避免全局变量和局部变量出现混淆，在定义全局变量时，有些公司会有一些开发要求，例如：
            - 全局变量名前都应该加 g_ 或者 gl_ 的前缀
"""

# num = 10
# 


def test1():
    
    # 声明 num 是局部变量
    global num
    num = 20


def test2():
    print(num)


test1()
test2()
